Computer programmers typically produce source code in high-level languages that humans can read and maintain. A compiler translates the source code so that the output is different than the input, typically by translating human-readable source code into machine-readable object code. A compiler may also translate source code into an intermediate representation (“IR”), such as Java® or Dalvik® bytecode, that may later be executed by a compatible runtime system (such as a virtual machine including an interpreter and/or a just-in-time (“JIT”) compiler), or compiled to machine-specific object code.
Source code that is well structured for human comprehension is typically not optimally structured for computing performance. Optimizing compilers transform source code into lower level code that is functionally equivalent but can have improved performance when executed by a computer. For example, a compiler can be configured to increase the speed of the compiled code, reduce the size of the compiled code, and/or minimize the power consumed by a processor executing the compiled code.